<?php
$pathToThis = pathinfo(__FILE__);
$ret = getcwd();
chdir($pathToThis['dirname']);

require_once("../excecoes/RandomException.class.php");
/**
 * Classe para objeto de geracao de qualquer coisa randomica
 *
 * @author Sergio Surkamp <sergiosurkamp@terra.com.br>
 */
class Randomico
{
	private $intervalos;
	
	function Randomico($intervalos = null)
	{
	}
	
	public function setIntervalos($intervalos)
	{
		if($intervalos == null)
		{
			$intervalos['letras'] = "ABCDEFGHIJKLMNOPQRSTUVXZYWabcdefghijklmnopqrstuvwxyz";
			$intervalos['numeros'] = "0123456789";
			$intervalos['caracteres'] = "!@#$%&*()[]{}-+*/=";
		}
		if(is_array($intervalos))
			$this->intervalos = $intervalos;
		else
			throw new RandomException("Intervalo inv&aacute;lo inv&aacute;lido");
	}
	public function setIntervaloTipo($tipo, $intervalo)
	{
		if(isset($this->intervalos[$tipo])) $this->intervalos[$tipo] = $intervalo;
	}
	public function gerarInteiro($tamanho = 5)
	{
		if($tamanho < 1)
			throw new RandomException("Tamanho de inteiro inv&aacute;lido");
		return intval($this->gerar($tamanho, $this->intervalos['numeros']));
	}
	public function gerarReal($tamanho = 5, $precisao = 2)
	{
		if($tamanho < 1 || $precisao < 1)
			throw new RandomException("Tamanho ou precisao de real inv&aacute;lido");
		return floatval($this->gerar($tamanho, $this->intervalos['numeros']).".".$this->gerar($precisao, $this->intervalos['numeros']));
	}
	public function gerarPalavra($tamanho = 5)
	{
		if($tamanho < 1)
			throw new RandomException("Tamanho de palavra inv&aacute;lido");
		return $this->gerar($tamanho, $this->intervalos['lestras']);
	}
	public function gerarCaracter()
	{
		return $this->gerar(1, $this->intervalos['lestras']);
	}
	public function gerarSenha($tamanho = 10, $usarIntervalos = null)
	{
		if(!$usarIntervalos) // intervalos em nulo
			$usarIntervalos = array('numeros','caracteres','letras');
		return $this->gerar($tamanho, $this->pegarIntervalo($usarIntervalos));
	}

	private function pegarIntervalo($selecionar)
	{
		$ret = "";
		foreach($this->intervalos as $chave=>$valor)
			if(in_array($chave, $selecionar))
				$ret .= $valor;
		if($ret === "")
			throw new RandomException("Intervalo invalido");
		return $ret;
	}
	private function gerarRandomico($tamanho, $intervaloStr)
	{
		$ret = "";
		$valores = count($intervaloStr);
		for($i = 0; $i < $tamanho; $i++)
			$ret .= substr($intervaloStr, rand(0, $valores), 1);
		return $ret;
	}
}
?>